package com.example.utils;

import lombok.extern.slf4j.Slf4j;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * TODO
 * MD5加密工具类
 * MD5加密是单向加密，不可逆 ==》 不可被解密
 * BCryptPasswordEncoder(强散列哈希算法): 双向加密，可逆 可被解密
 * @Comment：最难的一次作业
 * @Date: 2023/12/6
 */
@Slf4j
public class MD5Utils {

    /*
    * MD5加密
    * password: 要加密的内容
    * 返回一个32位加密串
    * */
    public static String md5(String password) {
        if (StringUtils.isNotEmpty(password)) {
            byte[] bytes = null;
            try {
                bytes = MessageDigest.getInstance("md5").digest(password.getBytes());
            } catch (NoSuchAlgorithmException e) {
                log.error("没有这个MD5加密算法");
            }
            // MD5加密算法得到的字节数组转换为16进制数字
            StringBuilder code = new StringBuilder(new BigInteger(1, bytes).toString(16));
            // 保证MD5加密后是32位
            for (int i = 0; i < 32 - code.length(); i++) {
                code.insert(0, "0");
            }
            return code.toString();
        } else {
            return null;
        }
    }
}
